/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package controlador;

import clases.Categoria;
import java.sql.SQLException;
import java.util.ArrayList;
import modelo.Conexion;
import modelo.MdlCategoria;
/**
 *
 * @author edder
 */
public class CtrlCategoria implements Controlador<Categoria>{
    private final MdlCategoria mdlCategoria;
    private final Conexion cnx;
    
    public CtrlCategoria(){
        this.mdlCategoria = new MdlCategoria();
        this.cnx = Conexion.getConexionDefault();
    }
    
    /**
     *
     * @param categoria
     * @param cnx
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    @Override
    public void insert(Categoria categoria, Conexion cnx) throws ClassNotFoundException, SQLException{
        if(cnx == null){
            this.cnx.abrirConexion();
            this.cnx.abrirTransaccion();
            this.mdlCategoria.insert(categoria, this.cnx);
            categoria.setIdCategoria(this.mdlCategoria.getLastId(this.cnx));
            this.cnx.cerrarTransaccion();
            this.cnx.cerrarConexion();
        }else{
            this.mdlCategoria.insert(categoria, cnx);
            categoria.setIdCategoria(this.mdlCategoria.getLastId(cnx));
        }
    }
    
    /**
     *
     * @param categoria
     * @param cnx
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    @Override
    public void update(Categoria categoria, Conexion cnx) throws ClassNotFoundException, SQLException{
        if(cnx == null){
            this.cnx.abrirConexion();
            this.mdlCategoria.update(categoria, this.cnx);
            this.cnx.cerrarConexion();
        }else{
            this.mdlCategoria.update(categoria, cnx);
        }
    }
    
    /**
     * Eliminar el registro de la base de datos
     * @param categoria
     * @param cnx
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public void eliminar(Categoria categoria, Conexion cnx) throws SQLException, ClassNotFoundException{
        if(cnx == null){
            this.cnx.abrirConexion();
            this.mdlCategoria.eliminar(categoria, this.cnx);
            this.cnx.cerrarConexion();
        }else{
            this.mdlCategoria.eliminar(categoria, cnx);
        }
    }
    
    /**
     *
     * @param query
     * @param cnx
     * @return
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public ArrayList<Categoria> getCategorias(String query, Conexion cnx) throws ClassNotFoundException, SQLException{
        ArrayList<Categoria> categorias;
        if(cnx == null){
            this.cnx.abrirConexion();
            categorias = this.mdlCategoria.getCategorias(query, this.cnx);
            this.cnx.cerrarConexion();
        }else{
            categorias = this.mdlCategoria.getCategorias(query, cnx);
        }
        return categorias;
    }
    
    /**
     *
     * @param idCategoria
     * @param cnx
     * @return
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    @Override
    public Categoria get(int idCategoria, Conexion cnx) throws ClassNotFoundException, SQLException{
        Categoria categoria;
        if(cnx == null){
            this.cnx.abrirConexion();
            categoria = this.mdlCategoria.get(idCategoria, this.cnx);
            this.cnx.cerrarConexion();
        }else{
            categoria = this.mdlCategoria.get(idCategoria, cnx);
        }
        return categoria;
    }
}
